package Controleur;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Observable;
import java.util.Observer;

import javax.swing.JProgressBar;

import Modele.FichierManager;
import Modele.MonteCarloSimulation;
import Vue.Fenetre;
import Vue.FenetreModifier;


public class montecarloController implements Observer{
	private Fenetre view;
	private MonteCarloSimulation model;
	private Thread t;
	private Thread t2;
	private long tempsAv;
	private long tempsAp;
	private long tempsTot;
	
	private FichierManager fm= new FichierManager();
	private List<MonteCarloSimulation> liste2 = new ArrayList<MonteCarloSimulation>();
	
	public montecarloController( Fenetre view,MonteCarloSimulation model)
	{
		this.view=view;
		this.model=model;
		
		model.addObserver(this);
		this.view.comboListener(new ItemAction());
		this.view.boutonGOListener(new boutonOKAction());
		this.view.boutonPlusListener(new boutonPlusAction());
		this.view.boutonGO2Listener(new boutonOK2Action());
	}
	
	  class ItemAction implements ActionListener{
		    public void actionPerformed(ActionEvent e) {
		      System.out.println("ActionListener : action sur " + view.getCombo().getSelectedItem());
		     model.setCallPutFlag(view.getCombo().getSelectedItem().toString());
		    }               
		  }
	 
	  class boutonOKAction implements ActionListener{

		@Override
		public void actionPerformed(ActionEvent e) {
			t=new Thread(new threadAction());
			t.start();
		}
		  
	  }
	  
	  class boutonOK2Action implements ActionListener{

		@Override
		public void actionPerformed(ActionEvent e) {
			t2=new Thread(new threadAction2());
			t2.start();	
		}
		  
	  }

	  
	  class boutonPlusAction implements ActionListener{
		  public void actionPerformed(ActionEvent e) {
			  FenetreModifier m =new FenetreModifier();
			  FenetreModifierControleur mc=new FenetreModifierControleur(m, model,view);
			  m.setVisible(true);
		  }
	  }

	@Override
	public void update(Observable o, Object arg) {
		view.getJLresult().setText("Resultat: "+model.getRes());
		view.getBar().setValue(model.getK());
		

	}
	class  threadAction implements Runnable{

		@Override
		public void run() {
			try {
				liste2=fm.recupererContact();
			} catch (FileNotFoundException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			view.getBar().setMinimum(0);
			view.getBar().setMaximum(model.getnSimulations());
			model.setRes(0.0);
			model.setSum(0.0);
			model.setS(liste2.get(4).getS());
			model.setX(liste2.get(4).getX());
			model.setR(liste2.get(4).getR());
			model.setT(liste2.get(4).getT());
			model.setB(liste2.get(4).getB());
			model.setV(liste2.get(4).getV());
			model.setnSteps(liste2.get(4).getnSteps());
			model.setnSimulations(liste2.get(4).getnSimulations());
			System.out.println("S: "+model.getS()+" X: "+model.getX()+" R: "+model.getR()+" T: "+model.getT()+" B: "+model.getB()+" V: "+model.getV()+" nsteps: "+model.getnSteps()+" nsimulation: "+model.getnSimulations());
			tempsAv=System.currentTimeMillis();
			model.calcule(view.getCombo().getSelectedItem().toString());	
			tempsAp=System.currentTimeMillis();
			tempsTot=tempsAv-tempsAp;
		}
		
	}
	
	class threadAction2 implements Runnable{

		@Override
		public void run() {
			
			model.setRes(0.0);
			model.setSum(0.0);
			System.out.println("combo2");
			System.out.println(view.getCombo2().getSelectedItem());
			
			try {
				liste2=fm.recupererContact();
			} catch (FileNotFoundException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}

			if(view.getCombo2().getSelectedItem().equals("Simulation 1")){
				view.getBar().setMinimum(0);
				view.getBar().setMaximum(10);
				model.setS(liste2.get(0).getS());
				model.setX(liste2.get(0).getX());
				model.setR(liste2.get(0).getR());
				model.setT(liste2.get(0).getT());
				model.setB(liste2.get(0).getB());
				model.setV(liste2.get(0).getV());
				model.setnSteps(liste2.get(0).getnSteps());
				model.setnSimulations(liste2.get(0).getnSimulations());
				System.out.println("S: "+model.getS()+" X: "+model.getX()+" R: "+model.getR()+" T: "+model.getT()+" B: "+model.getB()+" V: "+model.getV()+" nsteps: "+model.getnSteps()+" nsimulation: "+model.getnSimulations());
				
				model.calcule(view.getCombo().getSelectedItem().toString());
			}else if(view.getCombo2().getSelectedItem().equals("Simulation 2")){
				view.getBar().setMinimum(0);
				view.getBar().setMaximum(100);
				model.setS(liste2.get(1).getS());
				model.setX(liste2.get(1).getX());
				model.setR(liste2.get(1).getR());
				model.setT(liste2.get(1).getT());
				model.setB(liste2.get(1).getB());
				model.setV(liste2.get(1).getV());
				model.setnSteps(liste2.get(1).getnSteps());
				model.setnSimulations(liste2.get(1).getnSimulations());
				System.out.println("S: "+model.getS()+" X: "+model.getX()+" R: "+model.getR()+" T: "+model.getT()+" B: "+model.getB()+" V: "+model.getV()+" nsteps: "+model.getnSteps()+" nsimulation: "+model.getnSimulations());
				model.calcule(view.getCombo().getSelectedItem().toString());
			}else if(view.getCombo2().getSelectedItem().equals("Simulation 3")){
				view.getBar().setMinimum(0);
				view.getBar().setMaximum(1000);
				model.setS(liste2.get(2).getS());
				model.setX(liste2.get(2).getX());
				model.setR(liste2.get(2).getR());
				model.setT(liste2.get(2).getT());
				model.setB(liste2.get(2).getB());
				model.setV(liste2.get(2).getV());
				model.setnSteps(liste2.get(2).getnSteps());
				model.setnSimulations(liste2.get(2).getnSimulations());
				System.out.println("S: "+model.getS()+" X: "+model.getX()+" R: "+model.getR()+" T: "+model.getT()+" B: "+model.getB()+" V: "+model.getV()+" nsteps: "+model.getnSteps()+" nsimulation: "+model.getnSimulations());
				model.calcule(view.getCombo().getSelectedItem().toString());
			}else if(view.getCombo2().getSelectedItem().equals("Simulation 4")){
				view.getBar().setMinimum(0);
				view.getBar().setMaximum(10000);
				model.setS(liste2.get(3).getS());
				model.setX(liste2.get(3).getX());
				model.setR(liste2.get(3).getR());
				model.setT(liste2.get(3).getT());
				model.setB(liste2.get(3).getB());
				model.setV(liste2.get(3).getV());
				model.setnSteps(liste2.get(3).getnSteps());
				model.setnSimulations(liste2.get(3).getnSimulations());
				System.out.println("S: "+model.getS()+" X: "+model.getX()+" R: "+model.getR()+" T: "+model.getT()+" B: "+model.getB()+" V: "+model.getV()+" nsteps: "+model.getnSteps()+" nsimulation: "+model.getnSimulations());
				model.calcule(view.getCombo().getSelectedItem().toString());
			}else if(view.getCombo2().getSelectedItem().equals("Simulation 5")){
				view.getBar().setMinimum(0);
				view.getBar().setMaximum(100000);
				model.setS(liste2.get(4).getS());
				model.setX(liste2.get(4).getX());
				model.setR(liste2.get(4).getR());
				model.setT(liste2.get(4).getT());
				model.setB(liste2.get(4).getB());
				model.setV(liste2.get(4).getV());
				model.setnSteps(liste2.get(4).getnSteps());
				model.setnSimulations(liste2.get(4).getnSimulations());
				System.out.println("S: "+model.getS()+" X: "+model.getX()+" R: "+model.getR()+" T: "+model.getT()+" B: "+model.getB()+" V: "+model.getV()+" nsteps: "+model.getnSteps()+" nsimulation: "+model.getnSimulations());
				model.calcule(view.getCombo().getSelectedItem().toString());
			}
			
			
			
		}
		
	}

}

